adapt to add -> insert_bookmark change. Also merged some crossplatform
authorHans Breuer <hans@breuer.org>
Sat, 28 Feb 2004 15:09:27 +0000 (15:09 +0000)
committerHans Breuer <hans@src.gnome.org>
Sat, 28 Feb 2004 15:09:27 +0000 (15:09 +0000)
2004-02-28  Hans Breuer  <hans@breuer.org>

* gtk/gtkfilesystemwin32.c : adapt to add -> insert_bookmark
change. Also merged some crossplatform code from
gtkfilesystemunix.c
* gtk/gtk.def : updated externals

* gtk/makefile.msc.in : added gtkfilechooserembed.obj

ChangeLog
ChangeLog.pre-2-10
ChangeLog.pre-2-4
ChangeLog.pre-2-6
ChangeLog.pre-2-8
gtk/gtk.def
gtk/gtkfilesystemwin32.c
gtk/makefile.msc.in

index aec037291a4e9024e9606b2939f8a4ad2a227ca8..d46fece1a378c2c6dbb22b6231b0234d80e781f6 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,12 @@
+2004-02-28  Hans Breuer  <hans@breuer.org>
+
+       * gtk/gtkfilesystemwin32.c : adapt to add -> insert_bookmark
+       change. Also merged some crossplatform code from 
+       gtkfilesystemunix.c
+       * gtk/gtk.def : updated externals
+
+       * gtk/makefile.msc.in : added gtkfilechooserembed.obj
+
 2004-02-28  Hans Breuer  <hans@breuer.org>
 
        * gdk/win32/gdkdnd-win32.c : set current_dest_drag to NULL
index aec037291a4e9024e9606b2939f8a4ad2a227ca8..d46fece1a378c2c6dbb22b6231b0234d80e781f6 100644 (file)
@@ -1,3 +1,12 @@
+2004-02-28  Hans Breuer  <hans@breuer.org>
+
+       * gtk/gtkfilesystemwin32.c : adapt to add -> insert_bookmark
+       change. Also merged some crossplatform code from 
+       gtkfilesystemunix.c
+       * gtk/gtk.def : updated externals
+
+       * gtk/makefile.msc.in : added gtkfilechooserembed.obj
+
 2004-02-28  Hans Breuer  <hans@breuer.org>
 
        * gdk/win32/gdkdnd-win32.c : set current_dest_drag to NULL
index aec037291a4e9024e9606b2939f8a4ad2a227ca8..d46fece1a378c2c6dbb22b6231b0234d80e781f6 100644 (file)
@@ -1,3 +1,12 @@
+2004-02-28  Hans Breuer  <hans@breuer.org>
+
+       * gtk/gtkfilesystemwin32.c : adapt to add -> insert_bookmark
+       change. Also merged some crossplatform code from 
+       gtkfilesystemunix.c
+       * gtk/gtk.def : updated externals
+
+       * gtk/makefile.msc.in : added gtkfilechooserembed.obj
+
 2004-02-28  Hans Breuer  <hans@breuer.org>
 
        * gdk/win32/gdkdnd-win32.c : set current_dest_drag to NULL
index aec037291a4e9024e9606b2939f8a4ad2a227ca8..d46fece1a378c2c6dbb22b6231b0234d80e781f6 100644 (file)
@@ -1,3 +1,12 @@
+2004-02-28  Hans Breuer  <hans@breuer.org>
+
+       * gtk/gtkfilesystemwin32.c : adapt to add -> insert_bookmark
+       change. Also merged some crossplatform code from 
+       gtkfilesystemunix.c
+       * gtk/gtk.def : updated externals
+
+       * gtk/makefile.msc.in : added gtkfilechooserembed.obj
+
 2004-02-28  Hans Breuer  <hans@breuer.org>
 
        * gdk/win32/gdkdnd-win32.c : set current_dest_drag to NULL
index aec037291a4e9024e9606b2939f8a4ad2a227ca8..d46fece1a378c2c6dbb22b6231b0234d80e781f6 100644 (file)
@@ -1,3 +1,12 @@
+2004-02-28  Hans Breuer  <hans@breuer.org>
+
+       * gtk/gtkfilesystemwin32.c : adapt to add -> insert_bookmark
+       change. Also merged some crossplatform code from 
+       gtkfilesystemunix.c
+       * gtk/gtk.def : updated externals
+
+       * gtk/makefile.msc.in : added gtkfilechooserembed.obj
+
 2004-02-28  Hans Breuer  <hans@breuer.org>
 
        * gdk/win32/gdkdnd-win32.c : set current_dest_drag to NULL
index eeb76a4d23588e2fbb5f1d5e380477d9a540a12f..8f6e81a141e7c5413e93826e70f981f91764ae10 100755 (executable)
@@ -690,7 +690,6 @@ EXPORTS
        gtk_file_chooser_get_filename
        gtk_file_chooser_get_filenames
        gtk_file_chooser_get_filter
-       gtk_file_chooser_get_folder_mode
        gtk_file_chooser_get_local_only
        gtk_file_chooser_get_preview_filename
        gtk_file_chooser_get_preview_uri
@@ -716,7 +715,6 @@ EXPORTS
        gtk_file_chooser_set_extra_widget
        gtk_file_chooser_set_filename
        gtk_file_chooser_set_filter
-       gtk_file_chooser_set_folder_mode
        gtk_file_chooser_set_local_only
        gtk_file_chooser_set_preview_widget
        gtk_file_chooser_set_preview_widget_active
@@ -773,13 +771,13 @@ EXPORTS
        gtk_file_selection_set_filename
        gtk_file_selection_set_select_multiple
        gtk_file_selection_show_fileop_buttons
-       gtk_file_system_add_bookmark
        gtk_file_system_error_quark
        gtk_file_system_filename_to_path
        gtk_file_system_get_folder
        gtk_file_system_get_parent
        gtk_file_system_get_type
        gtk_file_system_get_volume_for_path
+       gtk_file_system_insert_bookmark
        gtk_file_system_list_bookmarks
        gtk_file_system_list_volumes
        gtk_file_system_make_path
index 7d21376deb88c3991ff4f85905086891cb729da1..c16905e10e0d99923ef64baf40ac870d72444b73 100644 (file)
@@ -145,8 +145,9 @@ static GdkPixbuf *gtk_file_system_win32_render_icon (GtkFileSystem     *file_sys
                                                      gint               pixel_size,
                                                      GError           **error);
 
-static gboolean       gtk_file_system_win32_add_bookmark     (GtkFileSystem            *file_system,
+static gboolean       gtk_file_system_win32_insert_bookmark  (GtkFileSystem            *file_system,
                                                              const GtkFilePath        *path,
+                                                             gint               position,
                                                              GError                  **error);
 static gboolean       gtk_file_system_win32_remove_bookmark  (GtkFileSystem            *file_system,
                                                              const GtkFilePath        *path,
@@ -266,7 +267,7 @@ gtk_file_system_win32_iface_init (GtkFileSystemIface *iface)
   iface->uri_to_path = gtk_file_system_win32_uri_to_path;
   iface->filename_to_path = gtk_file_system_win32_filename_to_path;
   iface->render_icon = gtk_file_system_win32_render_icon;
-  iface->add_bookmark = gtk_file_system_win32_add_bookmark;
+  iface->insert_bookmark = gtk_file_system_win32_insert_bookmark;
   iface->remove_bookmark = gtk_file_system_win32_remove_bookmark;
   iface->list_bookmarks = gtk_file_system_win32_list_bookmarks;
 }
@@ -507,14 +508,15 @@ gtk_file_system_win32_make_path (GtkFileSystem     *file_system,
                                 const gchar       *display_name,
                                 GError           **error)
 {
-  gchar *base_filename;
+  const char *base_filename;
   gchar *filename;
   gchar *full_filename;
   GError *tmp_error = NULL;
   GtkFilePath *result;
   
-  base_filename = filename_from_path (base_path);
+  base_filename = gtk_file_path_get_string (base_path);
   g_return_val_if_fail (base_filename != NULL, NULL);
+  g_return_val_if_fail (g_path_is_absolute (base_filename), NULL);
 
   filename = g_filename_from_utf8 (display_name, -1, NULL, NULL, &tmp_error);
   if (!filename)
@@ -526,14 +528,12 @@ gtk_file_system_win32_make_path (GtkFileSystem     *file_system,
                   tmp_error->message);
       
       g_error_free (tmp_error);
-      g_free (base_filename);
 
       return NULL;
     }
     
   full_filename = g_build_filename (base_filename, filename, NULL);
   result = filename_to_path (full_filename);
-  g_free (base_filename);
   g_free (filename);
   g_free (full_filename);
   
@@ -621,12 +621,13 @@ gtk_file_system_win32_parse (GtkFileSystem     *file_system,
                             gchar            **file_part,
                             GError           **error)
 {
-  char *base_filename;
+  const char *base_filename;
   gchar *last_slash;
   gboolean result = FALSE;
 
-  base_filename = filename_from_path (base_path);
+  base_filename = gtk_file_path_get_string (base_path);
   g_return_val_if_fail (base_filename != NULL, FALSE);
+  g_return_val_if_fail (g_path_is_absolute (base_filename), FALSE);
   
   last_slash = strrchr (str, G_DIR_SEPARATOR);
   if (!last_slash)
@@ -677,8 +678,6 @@ gtk_file_system_win32_parse (GtkFileSystem     *file_system,
        }
     }
 
-  g_free (base_filename);
-  
   return result;
 }
 
@@ -718,7 +717,8 @@ static gboolean
 bookmarks_serialize (GSList  **bookmarks,
                      gchar    *uri,
                      gboolean  add,
-                    GError  **error)
+                     gint      position,
+                     GError  **error)
 {
   gchar   *filename;
   gboolean ok = TRUE;
@@ -752,21 +752,36 @@ bookmarks_serialize (GSList  **bookmarks,
        }
       if (ok && (f = fopen (filename, "wb")) != NULL)
         {
+         if (add)
+           {
+             /* g_slist_insert() and our insert semantics are 
+              * compatible, but maybe we should check for 
+              * positon > length ?
+              * 
+              */
+             if (!g_slist_find_custom (list, uri, strcmp))
+                list = g_slist_insert (list, g_strdup (uri), position);
+             else
+               {
+                 g_set_error (error,
+                              GTK_FILE_SYSTEM_ERROR,
+                              GTK_FILE_SYSTEM_ERROR_ALREADY_EXISTS,
+                              "%s already exists in the bookmarks list",
+                              uri);
+                 ok = FALSE;
+               }
+           }
          for (entry = list; entry != NULL; entry = entry->next)
            {
              gchar *line = entry->data;
 
-             if (strcmp (line, uri) != 0)
+              /* to remove the given uri */
+             if (!add && strcmp (line, uri) != 0)
                {
                  fputs (line, f);
                  fputs ("\n", f);
                }
            }
-         if (add)
-           {
-             fputs (uri, f);
-             fputs ("\n", f);
-           }
          fclose (f);
        }
       else if (ok && error)
@@ -947,12 +962,15 @@ gtk_file_system_win32_render_icon (GtkFileSystem     *file_system,
 static GSList *_bookmarks = NULL;
 
 static gboolean
-gtk_file_system_win32_add_bookmark (GtkFileSystem     *file_system,
+gtk_file_system_win32_insert_bookmark (GtkFileSystem     *file_system,
                                    const GtkFilePath *path,
+                                   gint               position,
                                    GError           **error)
 {
   gchar *uri = gtk_file_system_win32_path_to_uri (file_system, path);
-  gboolean ret = bookmarks_serialize (&_bookmarks, uri, TRUE, error);
+  gboolean ret = bookmarks_serialize (&_bookmarks, uri, TRUE, position, error);
+  if (ret)
+    g_signal_emit_by_name (file_system, "bookmarks-changed", 0);
   g_free (uri);
   return ret;
                                
@@ -964,7 +982,9 @@ gtk_file_system_win32_remove_bookmark (GtkFileSystem     *file_system,
                                       GError           **error)
 {
   gchar *uri = gtk_file_system_win32_path_to_uri (file_system, path);
-  gboolean ret = bookmarks_serialize (&_bookmarks, uri, FALSE, error);
+  gboolean ret = bookmarks_serialize (&_bookmarks, uri, FALSE, 0, error);
+  if (ret)
+    g_signal_emit_by_name (file_system, "bookmarks-changed", 0);
   g_free (uri);
   return ret;
 }
@@ -976,7 +996,7 @@ gtk_file_system_win32_list_bookmarks (GtkFileSystem *file_system)
   GSList *entry;
 
 
-  if (bookmarks_serialize (&_bookmarks, "", FALSE, NULL))
+  if (bookmarks_serialize (&_bookmarks, "", FALSE, 0, NULL))
     {
       for (entry = _bookmarks; entry != NULL; entry = entry->next)
         {
index 41800dea13a96d1755a0ea5cd4827728c62b7078..54c0da739d77fb83a6b6ff22cbcb6eed3c9527ca 100644 (file)
@@ -104,6 +104,7 @@ gtk_OBJECTS =                                       \
        gtkfilechooser.obj                      \
        gtkfilechooserdefault.obj                       \
        gtkfilechooserdialog.obj                        \
+       gtkfilechooserembed.obj         \
        gtkfilechooserentry.obj                 \
        gtkfilechooserutils.obj                 \
        gtkfilechooserwidget.obj                        \